#include "Until.hpp"
#include "Level.hpp"
#include "Format.hpp"
#include "Message.hpp"
#include "Sink.hpp"
#include "Logger.hpp"
#include "Looper.hpp"
#include "Buffer.hpp"

#ifndef __LOGS_HPP__
#define __LOGS_HPP__

namespace Logs
{
    // 多重宏定义。
    // 1. 提供指定接口获取指定的日志器的全局接口(避免用户自己操作单例对象)
    // 日志器名字，指定日志器。
    Logger::Ptr getLogger(const std::string& name)
    {
        return LoggerManager::getInc().getLogger(name); 
    }
    // 默认日志器。
    Logger::Ptr rootLogger()
    {
        return LoggerManager::getInc().rootLogger();
    }

    // 2. 使用宏函数对日志器的接口进行代理(代理模式)。
    #define debug(fmt,...) debug(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define info(fmt,...) info(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define warn(fmt,...) warn(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define error(fmt,...) error(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define fatal(fmt,...) fatal(__FILE__,__LINE__,fmt,##__VA_ARGS__)

    // 3. 提供宏函数，直接通过默认日志器进行日志的标准输出打印。
    #define DEBUG(fmt,...) Logs::rootLogger()->debug(fmt,##__VA_ARGS__)
    #define INFO(fmt,...) Logs::rootLogger()->info(fmt,##__VA_ARGS__)
    #define WARN(fmt,...) Logs::rootLogger()->warn(fmt,##__VA_ARGS__)
    #define ERROR(fmt,...) Logs::rootLogger()->error(fmt,##__VA_ARGS__)
    #define FATAL(fmt,...) Logs::rootLogger()->fatal(fmt,##__VA_ARGS__);
}
#endif 